package com.laoli.controller;

import com.laoli.entity.JobBean;
import com.laoli.job.MyJob;
import com.laoli.utils.JobUtils;
import org.quartz.Scheduler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
@RequestMapping("/quartz")
public class QuartzController {
    @Autowired
    private Scheduler scheduler;

    private String jobName = "myjob";

    @GetMapping("/create")
    public String createJob(){
        JobBean jobBean = new JobBean(jobName, MyJob.class.getName(), "0/2 * * * * ?");
        JobUtils.createJob(scheduler, jobBean);
        return "任务创建成功！";
    }

    @GetMapping("/pause")
    public String pauseJob(){
        JobUtils.pauseJob(scheduler, jobName);
        return "任务暂停成功！";
    }

    @GetMapping("/resume")
    public String resumeJob(){
        JobUtils.resumeJob(scheduler, jobName);
        return "任务暂停成功！";
    }

    @GetMapping("/once")
    public String runJobOnce(){
        JobUtils.runJobOnce(scheduler, jobName);
        return "任务执行一次成功！";
    }

    @GetMapping("/delete")
    public String deleteJob(){
        JobUtils.deleteJob(scheduler, jobName);
        return "任务删除成功！";
    }

    @GetMapping("/modify")
    public String modifyJob(){
        JobBean jobBean = new JobBean(jobName, MyJob.class.getName(), "0/5 * * * * ?");
        JobUtils.modifyJob(scheduler, jobBean);
        return "任务修改成功！";
    }
}

// ----------------------
// scheduler是哪里来的？
//
// 在QuartzController中，scheduler是通过Spring的依赖注入（@Autowired）自动注入进来的：
// @Autowired
// private Scheduler scheduler;
//
// 1. Spring Boot集成Quartz时，自动配置了Scheduler：
//    - pom.xml中引入了spring-boot-starter-quartz依赖。
//    - Spring Boot会自动帮你创建并管理一个org.quartz.Scheduler类型的Bean。
//    - 只需要在需要用的地方用@Autowired声明，Spring就会自动把这个Scheduler实例注入进来。
//
// 2. Scheduler的作用：
//    - 这是Quartz的核心调度器，负责管理所有的定时任务（Job）的创建、调度、暂停、恢复、删除等操作。
//    - 你通过JobUtils工具类操作的其实就是这个被Spring管理的Scheduler实例。
//
// 总结：
// scheduler是由Spring Boot自动帮你创建并注入的Quartz调度器实例，你无需手动new或配置，只要加上@Autowired即可直接使用。
